#include <iostream>
#include <fstream>
#include "Resolver.h"

//agregados para casos de test
#include <ctime>
#include <sstream>

using namespace std;

int main(int argc, char **argv)
{
    string filename;
    // Nota: siempre se pasa 1 parametro al menos que es el nombre del ejecutable.
    if(argc < 2)
    {
		cout << "Por favor, ingrese el nombre del archivo a testear" << endl;
		cin >> filename;
    }
    else
        filename = argv[1];

    ifstream entrada(filename.c_str());
	if(!entrada)
	{
		cout << "Error al abrir el archivo de entrada " << filename << endl;
		cout << "Por favor, ejecute nuevamente el programa con la secuencia " << endl << argv[0] << " <nombre_archivo_entrada>" << endl;
		return 999;
	}
	
    Resolver resultante(entrada);

	time_t raw_time;
	struct tm *timeinfo;
	time(&raw_time);
	timeinfo = localtime(&raw_time);
	stringstream nombre_archivo;
	nombre_archivo << "salida_" << filename << "_" << (timeinfo->tm_year + 1900);
	if(timeinfo->tm_mon < 9)
		nombre_archivo << "0";
	nombre_archivo << (timeinfo->tm_mon + 1);
	if(timeinfo->tm_mday < 10)
		nombre_archivo << "0";
	nombre_archivo << timeinfo->tm_mday;
	nombre_archivo << "_";
	if(timeinfo->tm_hour < 10)
		nombre_archivo << "0";
	nombre_archivo << timeinfo->tm_hour;
	if(timeinfo->tm_min < 10)
		nombre_archivo << "0";
	nombre_archivo << timeinfo->tm_min;
	if(timeinfo->tm_sec < 10)
		nombre_archivo << "0";
	nombre_archivo << timeinfo->tm_sec;
	nombre_archivo << ".txt";
	ofstream salida(nombre_archivo.str().c_str());

    resultante.imprimirEntrada(salida);

	resultante.evitar_catastrofe();
	
	salida << endl << "Salida" << endl << resultante;

	return 0;
}


